Background


Data Collection

Plots were sampled at 27 independent sites throughout a subset of the Eastern Highland Rim ecoregion (delineated in tan below). Note that some sites were also in close proximity, making them difficult to see at broader zoom levels.

1031 1m^2 quadrats were sampled with differeing sample sizes per site based on the size of the site.

Data Configuration

Nearly all statistical packages require the data to be in a presence-absence form. There are several ways to do it (one of which can maintain cover values rather than changing it to binary data); I used a loop function. The result is a presence-absence matrix with Site as a column so subsamples can be organized accordingly.

Table 1. Sample of data in presence-absence format.
Site SCICYP PROPEC JUNDEB JUNREP CXJOOR CXLOUI
1.1.1 1 1 1 1 1 1 0
1.1.2 1 1 1 1 0 0 1
1.1.3 1 1 1 0 0 0 1
1.1.4 1 1 1 0 0 1 1
1.1.5 1 0 0 0 0 0 1

Diversity

Sites had widely varying observed total richness. The use of extrapolated species accumulation curves can tell us how many species are likely to be at the site based on how many were found in accumulating subsamples. However if a curve never flattens, it gives a wild estimate of richness (see Site 10).

What do the curves that made these estimates look like? Let’s take a look!

This plot is not particularly helpful other than to visualize the general span of observed and expected richnesses and sampling efforts. Examining the curves in portions of 3-4 is necessary to

These curves illustrate not only where the flattening point (expected richness) occurs, but also how quickly. Examining a curve can allow someone to estimate how many more samples would be needed to reach that point, however if doing so samples a larger area then the curve may never flatten.

Let’s see if sampling effort (# quadrats/area sampled) affected percent estimated sampling completion; if it did, that would be a big problem and I would have a lot of explaining to do to my committee.

There is no relationship between sampling effort and completion percentage (p=0.6366006). However, note that Sites 10 and 26 were flagged as outliers by the autoplot function. This inadequate sampling is likely the result of too few quadrats sampled at the wetland edge relative to the size of the wetland.

Evenness and Dominance


There appears to be a relationship between site richness and site area, but unexpectedly this relationship appears to be negative. Because the data are likely non-linear, a generalized linear model should be used to assess this relationship.

Communities

Which sites are similar?

There may be a lot of overlap in clusters due to the nestedness of some community types. We should revisit this later using quadrats as replicates.

Are sites similar because they’re geographically closer?


Call:
glm(formula = Sorensen ~ geographic, family = binomial, data = distance.f)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.13785  -0.13608   0.02589   0.19654   0.64852  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) 1.427e+00  1.626e-01   8.777   <2e-16 ***
geographic  6.933e-07  1.764e-06   0.393    0.694    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 43.121  on 701  degrees of freedom
Residual deviance: 42.966  on 700  degrees of freedom
AIC: 298.02

Number of Fisher Scoring iterations: 4

Ordinations

Implications

Plant communities aren’t real. We can all go home now.

LS0tDQp0aXRsZTogIkRldGVybWluaXN0aWMgcHJvY2Vzc2VzIGRyaXZlIHdldGxhbmQgcGxhbnQgY29tbXVuaXR5IGNvbXBvc2l0aW9uIGFuZCBkaXZlcnNpdHkiDQphdXRob3I6ICJDLiBNLiBDaWFmcmUiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogIGh0bWxfbm90ZWJvb2s6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgaGlnaGxpZ2h0OiB6ZW5idXJuDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIHJvd3MucHJpbnQ6IDEwDQogICAgdGhlbWU6IGpvdXJuYWwNCi0tLQ0KIyAgIHsudGFic2V0IC50YWJzZXQtZmFkZX0NCmBgYHtyIHNldHVwLCBOT1RJQ0UgVVNFIG9mIFBBQ01BTiwgaW5jbHVkZT1GQUxTRX0NCiNpbnN0YWxsIHBhY21hbiBmaXJzdCB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYW5kIGxvYWQgYW55IG5lZWRlZCBwYWNrYWdlcw0KcGFjbWFuOjpwX2xvYWQoZ2dwbG90MiwgZHBseXIsIHRpZHlyLCByZXNoYXBlLCBpTkVYVCwga25pdHIsIGthYmxlRXh0cmEsIGdnZm9ydGlmeSwgZ2dwdWJyLCB2ZWdhbiwgZ2Vvc3BoZXJlLCBtY2x1c3QsIHJnZGFsLCBsZWFmbGV0LCBnZ21hcCkNCg0KI05vdCBzdXJlIHdoeSBJIGtlZXAgdGhpcyBpbg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQojTG9hZCBkYXRhDQpzcHB4c2l0ZXM8LXJlYWQuY3N2KCJkYXRhL1ZFR0RBVEFET05FLmNzdiIsIGhlYWRlcj1UUlVFKQ0Kc2l0ZW5hbWVzPC1yZWFkLmNzdigiZGF0YS9TaXRlTmFtZXMuY3N2IiwgaGVhZGVyPVRSVUUpDQpzaXRlc2l6ZXM8LXJlYWQuY3N2KCJkYXRhL1NpdGVYc2l6ZTIuY3N2IiwgaGVhZGVyPVRSVUUpDQpxdWFkZGF0YXM8LXJlYWQuY3N2KCJkYXRhL3F1YWRtZXRyaWNzLmNzdiIsIGhlYWRlcj1UUlVFKQ0KY29sbmFtZXMocXVhZGRhdGFzKVtjb2xuYW1lcyhxdWFkZGF0YXMpPT0iRGVwdGguLm0uIl0gPC0gIkRlcHRoIg0KY29sbmFtZXMocXVhZGRhdGFzKVtjb2xuYW1lcyhxdWFkZGF0YXMpPT0iWC4uQ2Fub3B5Il0gPC0gIkNhbm9weSINCmNvbG5hbWVzKHF1YWRkYXRhcylbY29sbmFtZXMocXVhZGRhdGFzKT09IlBvbmQiXSA8LSAiU2l0ZSINCnNpdGVfcG9pbnRzIDwtIHNlbGVjdChzaXRlc2l6ZXMsIGMoIlNpdGUiLCAiTGF0aXR1ZGUiLCAiTG9uZ2l0dWRlIikpDQojTm90ZTogdGhlcmUgaXMgbm8gU2l0ZSAxNTsgaXQgd2FzIGRpdGNoZWQgaGFsZndheSB0aHJvdWdoIHNhbXBsaW5nIGJlY2F1c2UgaXQgd2FzIG5vdCBpbmRlcGVuZGVudCBmcm9tIFNpdGUgMTQuDQpgYGANCg0KIyMgQmFja2dyb3VuZCANCg0KPGZpZ3VyZT4NCjxpbWcgc3JjPSJJbWFnZXMvUXVhZHJhdENyb3BwZWQuanBnIj48L2ZpZ3VyZT48YnI+DQoNCiMjIyBEYXRhIENvbGxlY3Rpb24NCg0KUGxvdHMgd2VyZSBzYW1wbGVkIGF0IDI3IGluZGVwZW5kZW50IHNpdGVzIHRocm91Z2hvdXQgYSBzdWJzZXQgb2YgdGhlIEVhc3Rlcm4gSGlnaGxhbmQgUmltIGVjb3JlZ2lvbiAoZGVsaW5lYXRlZCBpbiB0YW4gYmVsb3cpLiBOb3RlIHRoYXQgc29tZSBzaXRlcyB3ZXJlIGFsc28gaW4gY2xvc2UgcHJveGltaXR5LCBtYWtpbmcgdGhlbSBkaWZmaWN1bHQgdG8gc2VlIGF0IGJyb2FkZXIgem9vbSBsZXZlbHMuDQpgYGB7ciBTdGF0aWMgbWFwIHByZXAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpFSFJhIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9hLmttbCIpDQpFSFJiIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9iLmttbCIpDQpFSFJjIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9jLmttbCIpDQpFSFJkIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9kLmttbCIpDQpFSFJlIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9lLmttbCIpDQpFSFJmIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9mLmttbCIpDQpFSFJnIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9nLmttbCIpDQpFSFJoIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9oLmttbCIpDQpFSFJpIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9pLmttbCIpDQpFSFJqIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9qLmttbCIpDQpFSFJrIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9rLmttbCIpDQpFSFJsIDwtIHJlYWRPR1IoIk1hcHB5Qml0cy9sLmttbCIpDQoNCm91dGxpbmVfcG9pbnRzYSA8LSBFSFJhQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzYSkgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWEgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2EpDQpzcF9vdXRsaW5lYSA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVhKSwxKQ0Kb3V0bGluZV9wb2x5YSA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lYSkpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlhKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzYiA8LSBFSFJiQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzYikgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWIgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2IpDQpzcF9vdXRsaW5lYiA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmViKSwxKQ0Kb3V0bGluZV9wb2x5YiA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lYikpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHliKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzYyA8LSBFSFJjQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzYykgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWMgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2MpDQpzcF9vdXRsaW5lYyA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVjKSwxKQ0Kb3V0bGluZV9wb2x5YyA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lYykpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHljKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzZCA8LSBFSFJkQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzZCkgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWQgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2QpDQpzcF9vdXRsaW5lZCA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVkKSwxKQ0Kb3V0bGluZV9wb2x5ZCA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lZCkpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlkKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzZSA8LSBFSFJlQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzZSkgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWUgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2UpDQpzcF9vdXRsaW5lZSA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVlKSwxKQ0Kb3V0bGluZV9wb2x5ZSA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lZSkpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHllKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzZiA8LSBFSFJmQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzZikgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWYgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2YpDQpzcF9vdXRsaW5lZiA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVmKSwxKQ0Kb3V0bGluZV9wb2x5ZiA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lZikpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlmKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzZyA8LSBFSFJnQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzZykgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWcgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2cpDQpzcF9vdXRsaW5lZyA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVnKSwxKQ0Kb3V0bGluZV9wb2x5ZyA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lZykpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlnKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzaCA8LSBFSFJoQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzaCkgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWggPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2gpDQpzcF9vdXRsaW5laCA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVoKSwxKQ0Kb3V0bGluZV9wb2x5aCA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5laCkpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHloKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzaSA8LSBFSFJpQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzaSkgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWkgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2kpDQpzcF9vdXRsaW5laSA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVpKSwxKQ0Kb3V0bGluZV9wb2x5aSA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5laSkpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlpKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzaiA8LSBFSFJqQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzaikgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWogPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2opDQpzcF9vdXRsaW5laiA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVqKSwxKQ0Kb3V0bGluZV9wb2x5aiA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5laikpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlqKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzayA8LSBFSFJrQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzaykgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWsgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2spDQpzcF9vdXRsaW5layA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVrKSwxKQ0Kb3V0bGluZV9wb2x5ayA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5laykpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlrKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQoNCm91dGxpbmVfcG9pbnRzbCA8LSBFSFJsQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHMNCmNvbG5hbWVzKG91dGxpbmVfcG9pbnRzbCkgPC0gYygiWCIsIlkiKQ0Kb3V0bGluZWwgPC0gUG9seWdvbihvdXRsaW5lX3BvaW50c2wpDQpzcF9vdXRsaW5lbCA8LSBQb2x5Z29ucyhsaXN0KG91dGxpbmVsKSwxKQ0Kb3V0bGluZV9wb2x5bCA8LSBTcGF0aWFsUG9seWdvbnMobGlzdChzcF9vdXRsaW5lbCkpDQpwcm9qNHN0cmluZyhvdXRsaW5lX3BvbHlsKSA8LSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCIpDQpgYGANCg0KDQpgYGB7ciBTdGF0aWMgbWFwLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBzdGF0ZSA8LSBtYXBfZGF0YSgic3RhdGUiKQ0KIyBjb3VudHkgPC0gbWFwX2RhdGEoImNvdW50eSIpDQojIA0KIyANCiMgdG4gPC0gY291bnR5ICU+JQ0KIyAgIGZpbHRlcihyZWdpb249PSJ0ZW5uZXNzZWUiKQ0KIyBreSA8LSBjb3VudHkgJT4lDQojICAgZmlsdGVyKHJlZ2lvbj09ImtlbnR1Y2t5IikNCiMgYWwgPC0gY291bnR5ICU+JQ0KIyAgIGZpbHRlcihyZWdpb249PSJhbGFiYW1hIikNCg0KDQojIGdncGxvdCgpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YSA9IHN0YXRlLCBhZXMoeD1sb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YSA9IHRuLCBhZXMoeD1sb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YSA9IGt5LCBhZXMoeD1sb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YSA9IGFsLCBhZXMoeD1sb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlhLCBhZXMoeD1vdXRsaW5lX3BvbHlhQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5YUBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQojICAgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHliLCBhZXMoeD1vdXRsaW5lX3BvbHliQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5YkBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQojICAgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiMgICBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHljLCBhZXMoeD1vdXRsaW5lX3BvbHljQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5Y0Bwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlkLCBhZXMoeD1vdXRsaW5lX3BvbHlkQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5ZEBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHllLCBhZXMoeD1vdXRsaW5lX3BvbHllQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5ZUBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlmLCBhZXMoeD1vdXRsaW5lX3BvbHlmQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5ZkBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlnLCBhZXMoeD1vdXRsaW5lX3BvbHlnQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5Z0Bwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHloLCBhZXMoeD1vdXRsaW5lX3BvbHloQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5aEBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlpLCBhZXMoeD1vdXRsaW5lX3BvbHlpQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5aUBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlqLCBhZXMoeD1vdXRsaW5lX3BvbHlqQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5akBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlrLCBhZXMoeD1vdXRsaW5lX3BvbHlrQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5a0Bwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1vdXRsaW5lX3BvbHlsLCBhZXMoeD1vdXRsaW5lX3BvbHlsQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9b3V0bGluZV9wb2x5bEBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSksDQogICMgICAgICAgICAgICAgIGFscGhhID0gLjgsIGZpbGw9Im9yYW5nZSIpICsNCiAgIyBnZW9tX3BvaW50KGRhdGEgPSBzaXRlX3BvaW50cywgYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLCBjb2xvcj0iYmxhY2siKSArDQogICMgIyBjb29yZF9maXhlZCh4bGltID0gYygtOTAuNSwgLTgyKSwgIHlsaW0gPSBjKDM0LjUsIDM3LjYpLCByYXRpbyA9IDEuMikgKw0KICAjIHhsYWIoIkxvbmdpdHVkZSIpICsgeWxhYigiTGF0aXR1ZGUiKSArIGdndGl0bGUoIkVhc3Rlcm4gSGlnaGxhbmQgUmltIHN1YnNldCAoZ29sZCkgYW5kIHN0dWR5IHNpdGVzIikNCg0KIyBnZW9tX21hcChkYXRhID0gZGF0YSwgbWFwID0gbWFwLCBhZXMobWFwX2lkID0gY291bnRyaWVzLCBmaWxsID0gY29sb3IpKSANCmBgYA0KDQpgYGB7ciBMZWFmbGV0IG1hcCwgZWNobz1GQUxTRSwgZmlnLndpZHRoID0gOC41LCBmaWcuaGVpZ2h0ID0gNS41fQ0KbGVhZmxldChkYXRhPXNpdGVzaXplcyklPiUNCiAgc2V0VmlldygtODUuODcyMzcsIDM1Ljc4MTY1LCB6b29tPTcpJT4lIA0KICBhZGRUaWxlcygpJT4lDQogICAgICBhZGRQb2x5Z29ucyhvdXRsaW5lX3BvbHlhLCANCiAgICAgICAgICAgICAgbG5nID0gb3V0bGluZV9wb2x5YUBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywxXSwgDQogICAgICAgICAgICAgIGxhdCA9IG91dGxpbmVfcG9seWFAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMl0sDQogICAgICAgICAgICAgIGNvbG9yID0gIiNERDhEMjkiLA0KICAgICAgICAgICAgICBvcGFjaXR5PSA5LA0KICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSAlPiUNCiAgICAgIGFkZFBvbHlnb25zKG91dGxpbmVfcG9seWIsIA0KICAgICAgICAgICAgICBsbmcgPSBvdXRsaW5lX3BvbHliQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLCANCiAgICAgICAgICAgICAgbGF0ID0gb3V0bGluZV9wb2x5YkBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSwNCiAgICAgICAgICAgICAgY29sb3IgPSAiI0REOEQyOSIsDQogICAgICAgICAgICAgIG9wYWNpdHk9IDksDQogICAgICAgICAgICAgIHdlaWdodCA9IDIpICU+JQ0KICAgICAgYWRkUG9seWdvbnMob3V0bGluZV9wb2x5YywgDQogICAgICAgICAgICAgIGxuZyA9IG91dGxpbmVfcG9seWNAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMV0sIA0KICAgICAgICAgICAgICBsYXQgPSBvdXRsaW5lX3BvbHljQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDJdLA0KICAgICAgICAgICAgICBjb2xvciA9ICIjREQ4RDI5IiwNCiAgICAgICAgICAgICAgb3BhY2l0eT0gOSwNCiAgICAgICAgICAgICAgd2VpZ2h0ID0gMikgJT4lDQogICAgICBhZGRQb2x5Z29ucyhvdXRsaW5lX3BvbHlkLCANCiAgICAgICAgICAgICAgbG5nID0gb3V0bGluZV9wb2x5ZEBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywxXSwgDQogICAgICAgICAgICAgIGxhdCA9IG91dGxpbmVfcG9seWRAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMl0sDQogICAgICAgICAgICAgIGNvbG9yID0gIiNERDhEMjkiLA0KICAgICAgICAgICAgICBvcGFjaXR5PSA5LA0KICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSAlPiUNCiAgICAgIGFkZFBvbHlnb25zKG91dGxpbmVfcG9seWUsIA0KICAgICAgICAgICAgICBsbmcgPSBvdXRsaW5lX3BvbHllQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLCANCiAgICAgICAgICAgICAgbGF0ID0gb3V0bGluZV9wb2x5ZUBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSwNCiAgICAgICAgICAgICAgY29sb3IgPSAiI0REOEQyOSIsDQogICAgICAgICAgICAgIG9wYWNpdHk9IDksDQogICAgICAgICAgICAgIHdlaWdodCA9IDIpICU+JQ0KICAgICAgYWRkUG9seWdvbnMob3V0bGluZV9wb2x5ZiwgDQogICAgICAgICAgICAgIGxuZyA9IG91dGxpbmVfcG9seWZAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMV0sIA0KICAgICAgICAgICAgICBsYXQgPSBvdXRsaW5lX3BvbHlmQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDJdLA0KICAgICAgICAgICAgICBjb2xvciA9ICIjREQ4RDI5IiwNCiAgICAgICAgICAgICAgb3BhY2l0eT0gOSwNCiAgICAgICAgICAgICAgd2VpZ2h0ID0gMikgJT4lDQogICAgICBhZGRQb2x5Z29ucyhvdXRsaW5lX3BvbHlnLCANCiAgICAgICAgICAgICAgbG5nID0gb3V0bGluZV9wb2x5Z0Bwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywxXSwgDQogICAgICAgICAgICAgIGxhdCA9IG91dGxpbmVfcG9seWdAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMl0sDQogICAgICAgICAgICAgIGNvbG9yID0gIiNERDhEMjkiLA0KICAgICAgICAgICAgICBvcGFjaXR5PSA5LA0KICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSAlPiUNCiAgICAgIGFkZFBvbHlnb25zKG91dGxpbmVfcG9seWgsIA0KICAgICAgICAgICAgICBsbmcgPSBvdXRsaW5lX3BvbHloQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLCANCiAgICAgICAgICAgICAgbGF0ID0gb3V0bGluZV9wb2x5aEBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSwNCiAgICAgICAgICAgICAgY29sb3IgPSAiI0REOEQyOSIsDQogICAgICAgICAgICAgIG9wYWNpdHk9IDksDQogICAgICAgICAgICAgIHdlaWdodCA9IDIpICU+JQ0KICAgICAgYWRkUG9seWdvbnMob3V0bGluZV9wb2x5aSwgDQogICAgICAgICAgICAgIGxuZyA9IG91dGxpbmVfcG9seWlAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMV0sIA0KICAgICAgICAgICAgICBsYXQgPSBvdXRsaW5lX3BvbHlpQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDJdLA0KICAgICAgICAgICAgICBjb2xvciA9ICIjREQ4RDI5IiwNCiAgICAgICAgICAgICAgb3BhY2l0eT0gOSwNCiAgICAgICAgICAgICAgd2VpZ2h0ID0gMikgJT4lDQogICAgICBhZGRQb2x5Z29ucyhvdXRsaW5lX3BvbHlqLCANCiAgICAgICAgICAgICAgbG5nID0gb3V0bGluZV9wb2x5akBwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywxXSwgDQogICAgICAgICAgICAgIGxhdCA9IG91dGxpbmVfcG9seWpAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMl0sDQogICAgICAgICAgICAgIGNvbG9yID0gIiNERDhEMjkiLA0KICAgICAgICAgICAgICBvcGFjaXR5PSA5LA0KICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSAlPiUNCiAgICAgIGFkZFBvbHlnb25zKG91dGxpbmVfcG9seWssIA0KICAgICAgICAgICAgICBsbmcgPSBvdXRsaW5lX3BvbHlrQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDFdLCANCiAgICAgICAgICAgICAgbGF0ID0gb3V0bGluZV9wb2x5a0Bwb2x5Z29uc1tbMV1dQFBvbHlnb25zW1sxXV1AY29vcmRzWywyXSwNCiAgICAgICAgICAgICAgY29sb3IgPSAiI0REOEQyOSIsDQogICAgICAgICAgICAgIG9wYWNpdHk9IDksDQogICAgICAgICAgICAgIHdlaWdodCA9IDIpICU+JQ0KICAgICAgYWRkUG9seWdvbnMob3V0bGluZV9wb2x5bCwgDQogICAgICAgICAgICAgIGxuZyA9IG91dGxpbmVfcG9seWxAcG9seWdvbnNbWzFdXUBQb2x5Z29uc1tbMV1dQGNvb3Jkc1ssMV0sIA0KICAgICAgICAgICAgICBsYXQgPSBvdXRsaW5lX3BvbHlsQHBvbHlnb25zW1sxXV1AUG9seWdvbnNbWzFdXUBjb29yZHNbLDJdLA0KICAgICAgICAgICAgICBjb2xvciA9ICIjREQ4RDI5IiwNCiAgICAgICAgICAgICAgb3BhY2l0eT0gOSwNCiAgICAgICAgICAgICAgd2VpZ2h0ID0gMikgJT4lDQogICAgICBhZGRDaXJjbGVNYXJrZXJzKGRhdGEgPSBzaXRlc2l6ZXMsIGxhdCA9IH5MYXRpdHVkZSwgbG5nID0gfkxvbmdpdHVkZSwNCiAgICAgICAgICAgICAgICAgICBsYWJlbCA9IH5TaXRlLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwID0gfkNvbW11bml0eSwNCiAgICAgICAgICAgICAgICAgICBvcGFjaXR5PSAxMDAsDQogICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0gMiwNCiAgICAgICAgICAgICAgICAgICBjb2xvcj0gImJsYWNrIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSB+NCklPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkRXNyaS5OYXRHZW9Xb3JsZE1hcCwgZ3JvdXAgPSAiTmF0R2VvIiklPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkRXNyaS5Xb3JsZEltYWdlcnksIGdyb3VwID0gIkVTUkkiKSAlPiUNCiAgYWRkTWluaU1hcCh6b29tTGV2ZWxPZmZzZXQgPSAtNCklPiUNCiAgYWRkU2NhbGVCYXIoKSU+JQ0KICBhZGRMYXllcnNDb250cm9sKA0KICAgIGJhc2VHcm91cHMgPSBjKCJOYXRHZW8iLCAiRVNSSSIpLA0KICAgIG9wdGlvbnMgPSBsYXllcnNDb250cm9sT3B0aW9ucyhjb2xsYXBzZWQgPSBGQUxTRSkpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoxMDMxIDFtXjIgcXVhZHJhdHMgd2VyZSBzYW1wbGVkIHdpdGggZGlmZmVyZWluZyBzYW1wbGUgc2l6ZXMgcGVyIHNpdGUgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHNpdGUuIA0KDQojIyMgRGF0YSBDb25maWd1cmF0aW9uDQoNCk5lYXJseSBhbGwgc3RhdGlzdGljYWwgcGFja2FnZXMgcmVxdWlyZSB0aGUgZGF0YSB0byBiZSBpbiBhIHByZXNlbmNlLWFic2VuY2UgZm9ybS4gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkbyBpdCAob25lIG9mIHdoaWNoIGNhbiBtYWludGFpbiBjb3ZlciB2YWx1ZXMgcmF0aGVyIHRoYW4gY2hhbmdpbmcgaXQgdG8gYmluYXJ5IGRhdGEpOyBJIHVzZWQgYSBsb29wIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IGlzIGEgcHJlc2VuY2UtYWJzZW5jZSBtYXRyaXggd2l0aCBTaXRlIGFzIGEgY29sdW1uIHNvIHN1YnNhbXBsZXMgY2FuIGJlIG9yZ2FuaXplZCBhY2NvcmRpbmdseS4gDQoNCmBgYHtyIExvb3AgbWFnaWMsIGNhY2hlPVRSVUUsIGluY2x1ZGU9RkFMU0V9DQpzaXRlc19zdWI8LXVuaXF1ZShzcHB4c2l0ZXMkSUQpDQpzcHBfc3ViPC11bmlxdWUoc3BweHNpdGVzJFNwZWNpZXMpDQoNCiNNYWtlIGEgbWF0cml4IHdpdGggbG9vcCBmdW5jdGlvbg0Kc3BwX2NvbW1hdCA8LSBtYXRyaXgoMCwgbGVuZ3RoKHNpdGVzX3N1YiksIGxlbmd0aChzcHBfc3ViKSkNCmZvciAoaSBpbiAxOm5yb3coc3BwX2NvbW1hdCkpe3RlbXBfc2l0ZXMgPC0gc3BweHNpdGVzW3doaWNoKHNwcHhzaXRlcyRJRCA9PSBzaXRlc19zdWJbaV0pLF0NCiAgc3BwX2NvbW1hdFtpLCB3aGljaChzcHBfc3ViJWluJXRlbXBfc2l0ZXMkU3BlY2llcyldPC0gMQ0KICBwcmludChpKX0NCg0KI05hbWUgcm93cyBhbmQgQ29sdW1ucw0Kcm93bmFtZXMoc3BwX2NvbW1hdCkgPC0gYXMuY2hhcmFjdGVyKHNpdGVzX3N1YikNCmNvbG5hbWVzKHNwcF9jb21tYXQpIDwtIGFzLmNoYXJhY3RlcihzcHBfc3ViKQ0KDQojQ2hhbmdlIG1hdHJpeCBpbnRvIGRhdGFmcmFtZQ0Kc3BwX2NvbW1hdC5kZjwtIGFzLmRhdGEuZnJhbWUoc3BwX2NvbW1hdCkNCg0KI01ha2UgZW1wdHkgcXVhZHJhdHMgdHJ1bHkgZW1wdHkNCnNwcF9jb21tYXQuZGYuZml4ZWQ8LXN1YnNldChzcHBfY29tbWF0LmRmLCBzZWxlY3Q9LWMoRW1wdHkpKQ0KDQojQWRkIHNpdGUgY29sdW1uIGJhY2sgaW4gYW5kIGNoYW5nZSBpdHMgbmFtZQ0KQWxsUG9uZHMgPC0gY2JpbmQoc2l0ZW5hbWVzJFBvbmQsc3BwX2NvbW1hdC5kZi5maXhlZCkNCm5hbWVzKEFsbFBvbmRzKVtuYW1lcyhBbGxQb25kcyk9PSJzaXRlbmFtZXMkUG9uZCJdIDwtICJTaXRlIg0KYGBgDQoNCmBgYHtyIEthYmxlIDEsIGVjaG89RkFMU0V9DQpBbGxQb25kc1RyaW1tZWQ8LXNlbGVjdChBbGxQb25kcywgYygxOjcpKQ0Ka2FibGUoQWxsUG9uZHNUcmltbWVkWzE6NSwgXSwgZm9ybWF0ID0gInBhbmRvYyIsIGZ1bGxfd2lkdGg9RiwgY2FwdGlvbiA9ICdUYWJsZSAxLiBTYW1wbGUgb2YgZGF0YSBpbiBwcmVzZW5jZS1hYnNlbmNlIGZvcm1hdC4nKQ0KYGBgDQoNCg0KIyMgRGl2ZXJzaXR5DQoNCmBgYHtyIFNwbGl0IHNpdGVzLCBpbmNsdWRlPUZBTFNFfQ0KI0JyZWFrIHVwIEFsbFBvbmRzIGludG8gZGF0YWZyYW1lcyBieSBzaXRlDQojVGhlIGZpcnN0IGNvbHVtbiBoYXMgdG8gYmUgcmVtb3ZlZCBmb3IgZWFjaA0KI1RyYW5zcG9zZSB0aGUgZGF0YWZyYW1lcyBzbyBzcGVjaWVzIGFyZSBjb2x1bW5zDQoNClMwMTwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDEpLCAtMSkpDQpTMDI8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAyKSwgLTEpKQ0KUzAzPC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMyksIC0xKSkNClMwNDwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDQpLCAtMSkpDQpTMDU8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSA1KSwgLTEpKQ0KUzA2PC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gNiksIC0xKSkNClMwNzwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDcpLCAtMSkpDQpTMDg8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSA4KSwgLTEpKQ0KUzA5PC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gOSksIC0xKSkNClMxMDwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDEwKSwgLTEpKQ0KUzExPC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMTEpLCAtMSkpDQpTMTI8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAxMiksIC0xKSkNClMxMzwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDEzKSwgLTEpKQ0KUzE0PC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMTQpLCAtMSkpDQpTMTY8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAxNiksIC0xKSkNClMxNzwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDE3KSwgLTEpKQ0KUzE4PC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMTgpLCAtMSkpDQpTMTk8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAxOSksIC0xKSkNClMyMDwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDIwKSwgLTEpKQ0KUzIxPC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMjEpLCAtMSkpDQpTMjI8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAyMiksIC0xKSkNClMyMzwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDIzKSwgLTEpKQ0KUzI0PC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMjQpLCAtMSkpDQpTMjU8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAyNSksIC0xKSkNClMyNjwtdChzZWxlY3QoZmlsdGVyKEFsbFBvbmRzLCBTaXRlID09IDI2KSwgLTEpKQ0KUzI3PC10KHNlbGVjdChmaWx0ZXIoQWxsUG9uZHMsIFNpdGUgPT0gMjcpLCAtMSkpDQpTMjg8LXQoc2VsZWN0KGZpbHRlcihBbGxQb25kcywgU2l0ZSA9PSAyOCksIC0xKSkNCmBgYA0KDQpgYGB7ciBVbmljb3JuIHZvbWl0IHByZXAsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBjYWNoZT1UUlVFLCBpbmNsdWRlPUZBTFNFfQ0KI01ha2UgYSBsaXN0IG9mIGFsbCBzaXRlIGRhdGFmcmFtZXMNCnNpdGUubGlzdC5hbGwgPSBsaXN0KFMwMT1TMDEsUzAyPVMwMixTMDM9UzAzLFMwND1TMDQsUzA1PVMwNSxTMDY9UzA2LFMwNz1TMDcsUzA4PVMwOCxTMDk9UzA5LFMxMD1TMTAsUzExPVMxMSxTMTI9UzEyLFMxMz1TMTMsUzE0PVMxNCxTMTY9UzE2LFMxNz1TMTcsUzE4PVMxOCxTMTk9UzE5LFMyMD1TMjAsUzIxPVMyMSxTMjI9UzIyLFMyMz1TMjMsUzI0PVMyNCxTMjU9UzI1LFMyNj1TMjYsUzI3PVMyNyxTMjg9UzI4KQ0KI0NvbnZlcnQgZXZlcnl0aGluZyBpbiBsaXN0IHRvIGluY2lkZW5jZSBmcmVxdWVuY2llcw0Kc2l0ZS5saXN0LmZyZXEuYWxsID0gbGFwcGx5KHNpdGUubGlzdC5hbGwsIGFzLmluY2ZyZXEpDQpgYGANCg0KYGBge3IgVW5pY29ybiB2b21pdCBwcmVwMiwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGNhY2hlPVRSVUUsIGluY2x1ZGU9RkFMU0V9DQpvdXQuaW5jLmFsbDwtaU5FWFQoc2l0ZS5saXN0LmZyZXEuYWxsLCBxPTAsIGRhdGF0eXBlPSJpbmNpZGVuY2VfZnJlcSIsIG5ib290PTEwMDAwKQ0KYGBgDQoNCmBgYHtyIEthYmxlIDIsIGluY2x1ZGU9RkFMU0V9DQojVGhlIGlORVhUIG91dHB1dCAoIm91dC5pbmMuYWxsIikgY29udGFpbnMgdGhyZWUgdGFibGVzOyAiQXN5RXN0IiBoYXMgYWxsIHRoZSBkYXRhIHdlIG5lZWQNCiNTYXZlZCBpdCBhcyBhbiBvYmplY3QgYW5kIGNoYW5nZWQgaXQgc28gaXQgd291bGQgYmUgbW9yZSByZWFkYWJsZQ0KUmljaERpdjwtb3V0LmluYy5hbGwkQXN5RXN0DQpSaWNoRGl2VDwtc3Vic2V0KFJpY2hEaXYsIHNlbGVjdD0tYyhzLmUuLCBMQ0wsIFVDTCkpDQpSaWNoRGl2T2JzPC1zdWJzZXQoc3ByZWFkKFJpY2hEaXZULCBEaXZlcnNpdHksIE9ic2VydmVkKSwgc2VsZWN0PS1jKEVzdGltYXRvcikpDQpSaWNoRGl2RXN0PC1zdWJzZXQoc3ByZWFkKFJpY2hEaXZULCBEaXZlcnNpdHksIEVzdGltYXRvciksIHNlbGVjdD0tYyhPYnNlcnZlZCkpDQoNCiNUcmltIGRvd24gY29sdW1uIG5hbWVzIHNvIHRoZXkgZG9uJ3Qgc3Vjaw0KbmFtZXMoUmljaERpdk9icyk8LWMoIlNpdGUiLCAiUmljaG5lc3NPYnMiLCAiU2hhbm5vbk9icyIsICJTaW1wc29uT2JzIikNCm5hbWVzKFJpY2hEaXZFc3QpPC1jKCJTaXRlIiwgIlJpY2huZXNzRXhwIiwgIlNoYW5ub25FeHAiLCAiU2ltcHNvbkV4cCIpDQoNCiNDb2xsYXBzZSBzaXRlczsgaGF2ZSB0byBkbyBmdW5reSB0aGluZ3MgdG8gZGVhbCB3aXRoIE5Bcw0KY29tcHJlc3MgPC0gZnVuY3Rpb24oeCkgYyhuYS5vbWl0KHgpLCBOQSlbMV0NClJpY2hEaXZPYnMuMTwtYWdncmVnYXRlKFJpY2hEaXZPYnNbMjo0XSwgUmljaERpdk9ic1sxXSwgY29tcHJlc3MpDQpSaWNoRGl2RXN0LjE8LWFnZ3JlZ2F0ZShSaWNoRGl2RXN0WzI6NF0sIFJpY2hEaXZFc3RbMV0sIGNvbXByZXNzKQ0KDQojUmVtb3ZlIHNpdGUgY29sdW1uIGZyb20gUmljaERpdkVzdCBzbyBpdCdzIG5vdCBkdXBsaWNhdGVkIHdoZW4gbWVyZ2luZw0KUmljaERpdkVzdC4yPC1zdWJzZXQoUmljaERpdkVzdC4xLCBzZWxlY3Q9LWMoU2l0ZSkpDQoNCiNNZXJnZSBldmVyeWJvZHkgdG9nZXRoZXINClJpY2hEaXZGaW5hbDwtY2JpbmQoUmljaERpdk9icy4xLCBSaWNoRGl2RXN0LjIpDQoNCiNSZW9yZGVyIGNvbHVtbnMgc28gdGhleSBtYWtlIHNlbnNlDQpSaWNoRGl2VGFiPC1SaWNoRGl2RmluYWxbLGMoMSwyLDUsMyw2LDQsNyldDQpSaWNoRGl2S2FiPC1SaWNoRGl2VGFiW2MoMSwgNiwgNywgOCwgMTAsIDI2LCAyNyksXQ0KDQprYWJsZShSaWNoRGl2S2FiWzE6NyxdLCBmb3JtYXQgPSAicGFuZG9jIiwgZnVsbF93aWR0aD1GLCBjYXB0aW9uID0gJ1RhYmxlIDIuIE9ic2VydmVkIGFuZCBleHBlY3RlZCBIaWxsIG51bWJlcnMgZnJvbSBhIHBvcnRpb24gb2YgdGhlIHNpdGVzLicpDQpgYGANCg0KYGBge3IgRXN0IGFuZCBPYnMgUmljaG5lc3MsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTEwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KUmljaG5lc3NPbmx5PC1maWx0ZXIoUmljaERpdiwgRGl2ZXJzaXR5ID09ICJTcGVjaWVzIHJpY2huZXNzIikNCmNvbG5hbWVzKFJpY2huZXNzT25seSlbY29sbmFtZXMoUmljaG5lc3NPbmx5KT09IkxDTCJdIDwtICJSaWNoTENMIg0KY29sbmFtZXMoUmljaG5lc3NPbmx5KVtjb2xuYW1lcyhSaWNobmVzc09ubHkpPT0iVUNMIl0gPC0gIlJpY2hVQ0wiDQpjb2xuYW1lcyhSaWNobmVzc09ubHkpW2NvbG5hbWVzKFJpY2huZXNzT25seSk9PSJFc3RpbWF0b3IiXSA8LSAiRXN0aW1hdGVkIg0KUmljaEdhdGg8LWdhdGhlcihSaWNobmVzc09ubHksUmljaG5lc3MsdmFsdWUsT2JzZXJ2ZWQ6RXN0aW1hdGVkKQ0KUmljaFNpemU8LSBjYmluZChSaWNoR2F0aCwgc2l0ZXNpemVzJFF1YWRyYXRzKQ0KY29sbmFtZXMoUmljaFNpemUpW2NvbG5hbWVzKFJpY2hTaXplKT09InNpdGVzaXplcyRRdWFkcmF0cyJdIDwtICJRdWFkcmF0cyINCg0KDQpnZ3Bsb3QoUmljaEdhdGgsIGFlcyh4PVNpdGUsIHk9dmFsdWUsIGNvbG9yPVJpY2huZXNzKSkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImRhcmtncmV5IiwgImJsYWNrIikpKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPVJpY2hMQ0wsIHltYXg9UmljaFVDTCksIHdpZHRoPS4zLCBjb2xvcj0iZGFya2dyZXkiKSArDQogIGdlb21fcG9pbnQoc2l6ZT0yKSsNCiAgeWxhYigiU3BlY2llcyBSaWNobmVzcyIpKw0KICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMjUwKSkrDQogIGdndGl0bGUoIkVzdGltYXRlZCBhbmQgb2JzZXJ2ZWQgc3BlY2llcyByaWNobmVzcyBieSBzaXRlLCB3aXRoIDk1JSBjb25maWRlbmNlIGludGVydmFscy4iKSsNCiAgbGFicyhjYXB0aW9uPSJOb3RlIHRoYXQgdXBwZXIgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgU2l0ZSAyNiBleHRlbmRzIHRvIDI2Mi44IGFuZCBTaXRlIDEwIGV4dGVuZHMgdG8gNDA4LjUyLiIpKw0KICB0aGVtZShheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTE0KSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkNCmBgYA0KDQpTaXRlcyBoYWQgd2lkZWx5IHZhcnlpbmcgb2JzZXJ2ZWQgdG90YWwgcmljaG5lc3MuIFRoZSB1c2Ugb2YgZXh0cmFwb2xhdGVkIHNwZWNpZXMgYWNjdW11bGF0aW9uIGN1cnZlcyBjYW4gdGVsbCB1cyBob3cgbWFueSBzcGVjaWVzIGFyZSBsaWtlbHkgdG8gYmUgYXQgdGhlIHNpdGUgYmFzZWQgb24gaG93IG1hbnkgd2VyZSBmb3VuZCBpbiBhY2N1bXVsYXRpbmcgc3Vic2FtcGxlcy4gSG93ZXZlciBpZiBhIGN1cnZlIG5ldmVyIGZsYXR0ZW5zLCBpdCBnaXZlcyBhIHdpbGQgZXN0aW1hdGUgb2YgcmljaG5lc3MgKHNlZSBTaXRlIDEwKS4NCg0KV2hhdCBkbyB0aGUgY3VydmVzIHRoYXQgbWFkZSB0aGVzZSBlc3RpbWF0ZXMgbG9vayBsaWtlPyBMZXQncyB0YWtlIGEgbG9vayENCg0KYGBge3IgVW5pY29ybiB2b21pdCwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGNhY2hlPVRSVUV9DQpnZ2lORVhUKG91dC5pbmMuYWxsLCB0eXBlPTEsIGNvbG9yLnZhcj0ic2l0ZSIpICsgDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE4KSArDQogIHlsYWIoIlNwZWNpZXMgUmljaG5lc3MiKSArDQogIHhsYWIoIk51bWJlciBvZiBRdWFkcmF0cyIpICsNCiAgZ2d0aXRsZSgiSW50ZXJwb2xhdGVkIGFuZCBleHRyYXBvbGF0ZWQgcmljaG5lc3MiKSArDQogIGxhYnMoY2FwdGlvbj0iQj0xMDAwMC4iKQ0KYGBgDQoNClRoaXMgcGxvdCBpcyBub3QgcGFydGljdWxhcmx5IGhlbHBmdWwgb3RoZXIgdGhhbiB0byB2aXN1YWxpemUgdGhlIGdlbmVyYWwgc3BhbiBvZiBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgcmljaG5lc3NlcyBhbmQgc2FtcGxpbmcgZWZmb3J0cy4gRXhhbWluaW5nIHRoZSBjdXJ2ZXMgaW4gcG9ydGlvbnMgb2YgMy00IGlzIG5lY2Vzc2FyeSB0byANCg0KYGBge3IgU21hbGxlciBjdXJ2ZXMgMSwgaW5jbHVkZT1GQUxTRX0NCiNMaXN0IHRoZSBkYXRhZnJhbWVzLCB0aGVuIGNvbnZlcnQgdGhlbSBpbnRvIGluY2lkZW5jZSBmcmVxdWVuY2llcw0KI0kgYnJva2UgdGhlbSBpbnRvIG1hbmFnZWFibGUgY2h1bmtzIHRoYXQgZ3JhcGggbW9yZSBjbGVhcmx5IHRoYW4gZXZlcnl0aGluZyBhdCBvbmNlDQoNCnNpdGUubGlzdC4xID0gbGlzdChTMDM9UzAzLCBTMDg9UzA4LCAgUzA5PVMwOSwgUzI4PVMyOCkNCnNpdGUubGlzdC5mcmVxLjEgPSBsYXBwbHkoc2l0ZS5saXN0LjEsIGFzLmluY2ZyZXEpDQoNCnNpdGUubGlzdC4yID0gbGlzdChTMDE9UzAxLCBTMDI9UzAyLCAgUzExPVMxMSwgUzI3PVMyNykNCnNpdGUubGlzdC5mcmVxLjIgPSBsYXBwbHkoc2l0ZS5saXN0LjIsIGFzLmluY2ZyZXEpDQoNCnNpdGUubGlzdC4zID0gbGlzdChTMTA9UzEwLCBTMTM9UzEzLCBTMTQ9UzE0LCBTMjM9UzIzKQ0Kc2l0ZS5saXN0LmZyZXEuMyA9IGxhcHBseShzaXRlLmxpc3QuMywgYXMuaW5jZnJlcSkNCg0KDQpzaXRlLmxpc3QuNCA9IGxpc3QoUzA1PVMwNSxTMTI9UzEyLCBTMTc9UzE3KQ0Kc2l0ZS5saXN0LmZyZXEuNCA9IGxhcHBseShzaXRlLmxpc3QuNCwgYXMuaW5jZnJlcSkNCg0Kc2l0ZS5saXN0LjUgPSBsaXN0KCBTMTk9UzE5LCBTMjA9UzIwLCBTMjE9UzIxLCBTMjU9UzI1KQ0Kc2l0ZS5saXN0LmZyZXEuNSA9IGxhcHBseShzaXRlLmxpc3QuNSwgYXMuaW5jZnJlcSkNCg0Kc2l0ZS5saXN0LjYgPSBsaXN0KFMwNj1TMDYsIFMxNj1TMTYsIFMyMj1TMjIsIFMyNj1TMjYpDQpzaXRlLmxpc3QuZnJlcS42ID0gbGFwcGx5KHNpdGUubGlzdC42LCBhcy5pbmNmcmVxKQ0KDQpzaXRlLmxpc3QuNyA9IGxpc3QoUzA0PVMwNCwgUzA3PVMwNywgUzE4PVMxOCwgUzI0PVMyNCkNCnNpdGUubGlzdC5mcmVxLjcgPSBsYXBwbHkoc2l0ZS5saXN0LjcsIGFzLmluY2ZyZXEpDQpgYGANCg0KYGBge3IgU21hbGxlciBjdXJ2ZXMgMiwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9NywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgY2FjaGU9VFJVRX0NCiNSaWNobmVzcyAocT0wKSwgU2hhbm5vbiBEaXYgKHE9MSksIFNpbXBzb24gRGl2IChxPTIpDQojVXNlIGdyZXk9VFJVRSB0byBtYWtlIGFsbCBsaW5lcyBibGFjaw0Kb3V0LmluYzE8LWlORVhUKHNpdGUubGlzdC5mcmVxLjEsIHE9MCwgZGF0YXR5cGU9ImluY2lkZW5jZV9mcmVxIiwgc2l6ZT1OVUxMLCBuYm9vdD0xMDApDQpBPC1nZ2lORVhUKG91dC5pbmMxLCB0eXBlPTEsIGNvbG9yLnZhcj0ic2l0ZSIpICsgDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE4KSArDQogIHlsYWIoIlNwZWNpZXMgUmljaG5lc3MiKSArDQogIHhsYWIoIk51bWJlciBvZiBRdWFkcmF0cyIpICsNCiAgbGFicyhjYXB0aW9uPSJCPTEwMC4iKQ0KDQpvdXQuaW5jMjwtaU5FWFQoc2l0ZS5saXN0LmZyZXEuMiwgcT0wLCBkYXRhdHlwZT0iaW5jaWRlbmNlX2ZyZXEiLCBzaXplPU5VTEwsIG5ib290PTEwMCkNCkI8LWdnaU5FWFQob3V0LmluYzIsIHR5cGU9MSwgY29sb3IudmFyPSJzaXRlIikgKyANCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTgpICsNCiAgeWxhYigiU3BlY2llcyBSaWNobmVzcyIpICsNCiAgeGxhYigiTnVtYmVyIG9mIFF1YWRyYXRzIikgKw0KICBsYWJzKGNhcHRpb249IkI9MTAwLiIpDQoNCm91dC5pbmMzPC1pTkVYVChzaXRlLmxpc3QuZnJlcS4zLCBxPTAsIGRhdGF0eXBlPSJpbmNpZGVuY2VfZnJlcSIsIHNpemU9TlVMTCwgbmJvb3Q9MTAwKQ0KQzwtZ2dpTkVYVChvdXQuaW5jMywgdHlwZT0xLCBjb2xvci52YXI9InNpdGUiKSArIA0KICB0aGVtZV9idyhiYXNlX3NpemUgPSAxOCkgKw0KICB5bGFiKCJTcGVjaWVzIFJpY2huZXNzIikgKw0KICB4bGFiKCJOdW1iZXIgb2YgUXVhZHJhdHMiKSArDQogIGxhYnMoY2FwdGlvbj0iQj0xMDAuIikNCg0Kb3V0LmluYzQ8LWlORVhUKHNpdGUubGlzdC5mcmVxLjQsIHE9MCwgZGF0YXR5cGU9ImluY2lkZW5jZV9mcmVxIiwgc2l6ZT1OVUxMLCBuYm9vdD0xMDApDQpEPC1nZ2lORVhUKG91dC5pbmM0LCB0eXBlPTEsIGNvbG9yLnZhcj0ic2l0ZSIpICsgDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE4KSArDQogIHlsYWIoIlNwZWNpZXMgUmljaG5lc3MiKSArDQogIHhsYWIoIk51bWJlciBvZiBRdWFkcmF0cyIpICsNCiAgbGFicyhjYXB0aW9uPSJCPTEwMC4iKQ0KDQpvdXQuaW5jNTwtaU5FWFQoc2l0ZS5saXN0LmZyZXEuNSwgcT0wLCBkYXRhdHlwZT0iaW5jaWRlbmNlX2ZyZXEiLCBzaXplPU5VTEwsIG5ib290PTEwMCkNCkU8LWdnaU5FWFQob3V0LmluYzUsIHR5cGU9MSwgY29sb3IudmFyPSJzaXRlIikgKyANCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTgpICsNCiAgeWxhYigiU3BlY2llcyBSaWNobmVzcyIpICsNCiAgeGxhYigiTnVtYmVyIG9mIFF1YWRyYXRzIikgKw0KICBsYWJzKGNhcHRpb249IkI9MTAwLiIpDQoNCm91dC5pbmM2PC1pTkVYVChzaXRlLmxpc3QuZnJlcS42LCBxPTAsIGRhdGF0eXBlPSJpbmNpZGVuY2VfZnJlcSIsIHNpemU9TlVMTCwgbmJvb3Q9MTAwKQ0KRjwtZ2dpTkVYVChvdXQuaW5jNiwgdHlwZT0xLCBjb2xvci52YXI9InNpdGUiKSArIA0KICB0aGVtZV9idyhiYXNlX3NpemUgPSAxOCkgKw0KICB5bGFiKCJTcGVjaWVzIFJpY2huZXNzIikgKw0KICB4bGFiKCJOdW1iZXIgb2YgUXVhZHJhdHMiKSArDQogIGxhYnMoY2FwdGlvbj0iQj0xMDAuIikNCg0Kb3V0LmluYzc8LWlORVhUKHNpdGUubGlzdC5mcmVxLjcsIHE9MCwgZGF0YXR5cGU9ImluY2lkZW5jZV9mcmVxIiwgc2l6ZT1OVUxMLCBuYm9vdD0xMDApDQpHPC1nZ2lORVhUKG91dC5pbmM3LCB0eXBlPTEsIGNvbG9yLnZhcj0ic2l0ZSIpICsgDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE4KSArDQogIHlsYWIoIlNwZWNpZXMgUmljaG5lc3MiKSArDQogIHhsYWIoIk51bWJlciBvZiBRdWFkcmF0cyIpICsNCiAgbGFicyhjYXB0aW9uPSJCPTEwMC4iKQ0KYGBgDQoNCmBgYHtyIE1hbnkgY3VydmVzIG91dHB1dCwgZmlnLmhlaWdodD0yNSwgZmlnLndpZHRoPTcsIGluY2x1ZGU9RkFMU0V9DQpnZ2FycmFuZ2UoQSwgQiwgQywgRCwgRSwgRiwgRywgbnJvdz03KQ0KYGBgDQogDQpgYGB7ciBEYXRhIHJlYXJyYW5naW5nLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD0xMCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCkludGVydmFsczwtc2VsZWN0KHNsaWNlKFJpY2hHYXRoLCBjKDI4OjU0KSksIGMoUmljaExDTCwgUmljaFVDTCkpDQpSaWNoSW50czwtY2JpbmQoUmljaERpdlRhYiwgSW50ZXJ2YWxzKQ0KUmljaEludHMkUGVyY0NvbXBsZXRlIDwtIFJpY2hJbnRzJFJpY2huZXNzT2JzL1JpY2hJbnRzJFJpY2huZXNzRXhwKjEwMA0KUmljaEludHMkUGVyY0NvbXBsZXRlVTwtIFJpY2hJbnRzJFJpY2huZXNzT2JzL1JpY2hJbnRzJFJpY2hVQ0wqMTAwDQpSaWNoSW50cyRQZXJjQ29tcGxldGVMPC0gUmljaEludHMkUmljaG5lc3NPYnMvUmljaEludHMkUmljaExDTCoxMDANCnNpdGVzaXplcyRRdWFkc0FyZWE8LSBzaXRlc2l6ZXMkUXVhZHJhdHMvKHBpKihzaXRlc2l6ZXMkTGVuZ3RoXjIpKQ0Kc2l0ZXNpemVzJEFyZWE8LShwaSooc2l0ZXNpemVzJExlbmd0aF4yKSkNCiMgDQojIFRISVMgUExPVCBJUyBUUkFTSA0KIyBnZ3Bsb3QoUmljaEludHMsIGFlcyh4PVNpdGUsIHk9UGVyY0NvbXBsZXRlKSkgKw0KIyAgIGdlb21fYmFyKGFlcyh5PXNpdGVzaXplcyRRdWFkcmF0cyx4PVNpdGUpLCBzdGF0PSJpZGVudGl0eSIsIHdpZHRoID0gMC43NSwgZmlsbD0ibGlnaHRncmV5IikrDQojICAgZ2VvbV9wb2ludChzaXplPTIpKw0KIyAgIGdlb21fZXJyb3JiYXIoYWVzKHltaW49UGVyY0NvbXBsZXRlTCwgeW1heD1QZXJjQ29tcGxldGVVKSwgd2lkdGg9LjMpICsNCiMgICB5bGFiKCJPYnNlcnZlZC9FeHBlY3RlZCBSaWNobmVzcyAqIDEwMCIpKw0KIyAgIHNjYWxlX3lfY29udGludW91cyhzZWMuYXhpcyA9IHNlY19heGlzKH4uLCBuYW1lID0gIlF1YWRyYXRzIFNhbXBsZWQiKSkrDQojICAgZ2d0aXRsZSgiQ29tcGxldGlvbiBwZXJjZW50YWdlIGFuZCBzYW1wbGUgc2l6ZSBwZXIgc2l0ZSIpKw0KIyAgIHRoZW1lKGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTQpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKQ0KYGBgDQoNCmBgYHtyIExNIFNhbXBsaW5nIHN1ZmZpY2llbmN5LCBpbmNsdWRlPUZBTFNFfQ0KbG1SaWNoUXVhZCA8LSBsbShSaWNoSW50cyRQZXJjQ29tcGxldGUgfiBzaXRlc2l6ZXMkUXVhZHNBcmVhKQ0KYXV0b3Bsb3QobG1SaWNoUXVhZCkNCmFSaWNoUXVhZDwtYW5vdmEobG1SaWNoUXVhZCkNCmFSaWNoUXVhZA0KYGBgDQoNClRoZXNlIGN1cnZlcyBpbGx1c3RyYXRlIG5vdCBvbmx5ICp3aGVyZSogdGhlIGZsYXR0ZW5pbmcgcG9pbnQgKGV4cGVjdGVkIHJpY2huZXNzKSBvY2N1cnMsIGJ1dCBhbHNvICpob3cgcXVpY2tseSouIEV4YW1pbmluZyBhIGN1cnZlIGNhbiBhbGxvdyBzb21lb25lIHRvIGVzdGltYXRlIGhvdyBtYW55IG1vcmUgc2FtcGxlcyB3b3VsZCBiZSBuZWVkZWQgdG8gcmVhY2ggdGhhdCBwb2ludCwgaG93ZXZlciBpZiBkb2luZyBzbyBzYW1wbGVzIGEgbGFyZ2VyIGFyZWEgdGhlbiB0aGUgY3VydmUgbWF5IG5ldmVyIGZsYXR0ZW4uIA0KDQpMZXQncyBzZWUgaWYgc2FtcGxpbmcgZWZmb3J0ICgjIHF1YWRyYXRzL2FyZWEgc2FtcGxlZCkgYWZmZWN0ZWQgcGVyY2VudCBlc3RpbWF0ZWQgc2FtcGxpbmcgY29tcGxldGlvbjsgaWYgaXQgZGlkLCB0aGF0IHdvdWxkIGJlIGEgYmlnIHByb2JsZW0gYW5kIEkgd291bGQgaGF2ZSBhIGxvdCBvZiBleHBsYWluaW5nIHRvIGRvIHRvIG15IGNvbW1pdHRlZS4NCg0KYGBge3IgU2FtcGxpbmcgc3VmZmljaWVuY3ksIGVjaG89RkFMU0V9DQpnZ3Bsb3QoUmljaEludHMsIGFlcyh4PXNpdGVzaXplcyRRdWFkc0FyZWEsIHk9UGVyY0NvbXBsZXRlLCBjb2xvcj0iYmxhY2siKSkgKw0KICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIiwgY29sb3I9ImJsYWNrIikrDQogIGdlb21fdGV4dChsYWJlbD1SaWNoSW50cyRTaXRlLCBjb2xvcj0iYmxhY2siLCBzaXplPTMpKw0KICB5bGFiKCJFc3RpbWF0ZWQgJSBTcGVjaWVzIFNhbXBsZWQiKSsNCiAgeGxhYihleHByZXNzaW9uKFF1YWRyYXRzflNhbXBsZWQvU2l0ZX5BcmVhfihtXjIpKSkrDQogIGdndGl0bGUoIkVzdGltYXRlZCBzYW1wbGluZyBjb21wbGV0aW9uIGRvZXMgbm90IGluY3JlYXNlIHdpdGggc2FtcGxpbmcgZWZmb3J0IikrDQogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxMDApKSsNCiAgdGhlbWUoYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xNCksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCkpDQpgYGANCg0KVGhlcmUgaXMgbm8gcmVsYXRpb25zaGlwIGJldHdlZW4gc2FtcGxpbmcgZWZmb3J0IGFuZCBjb21wbGV0aW9uIHBlcmNlbnRhZ2UgKHA9YHIgYVJpY2hRdWFkWzEsNV1gKS4gSG93ZXZlciwgbm90ZSB0aGF0IFNpdGVzIDEwIGFuZCAyNiB3ZXJlIGZsYWdnZWQgYXMgb3V0bGllcnMgYnkgdGhlIGF1dG9wbG90IGZ1bmN0aW9uLiBUaGlzIGluYWRlcXVhdGUgc2FtcGxpbmcgaXMgbGlrZWx5IHRoZSByZXN1bHQgb2YgdG9vIGZldyBxdWFkcmF0cyBzYW1wbGVkIGF0IHRoZSB3ZXRsYW5kIGVkZ2UgcmVsYXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHdldGxhbmQuIA0KDQoNCg0KIyMgRXZlbm5lc3MgYW5kIERvbWluYW5jZQ0KDQo8ZmlndXJlPg0KPGltZyBzcmM9IkltYWdlcy9Hb29zZWNyb3BwZWQuanBnIj48L2ZpZ3VyZT48YnI+DQoNCmBgYHtyIFNpdGUgc2l6ZSBhbmQgcmljaG5lc3MsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpxdWFkZGllczwtbWVyZ2Uoc2l0ZXNpemVzLCBSaWNoSW50cywgYnk9IlNpdGUiKQ0KcXVhZGRpZXMkTGF0aXR1ZGUgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIocXVhZGRpZXMkTGF0aXR1ZGUpKQ0KDQpnZ3Bsb3QoUmljaEludHMsIGFlcyh4PXNpdGVzaXplcyRBcmVhLCB5PVJpY2hJbnRzJFJpY2huZXNzT2JzKSkgKw0KICBnZW9tX3BvaW50KHNpemU9MikrDQogIHlsYWIoIlNpdGUgcmljaG5lc3MiKSsNCiAgeGxhYihleHByZXNzaW9uKFNpdGV+YXJlYX4obV4yKSkpKw0KICBnZ3RpdGxlKCJTaXRlIGFyZWEgZG9lcyBub3QgaGF2ZSBhIHBvc2l0aXZlIGFmZmVjdCBvbiBzaXRlIHJpY2huZXNzIikrDQogIHRoZW1lKGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTQpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKQ0KYGBgDQoNClRoZXJlIGFwcGVhcnMgdG8gYmUgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzaXRlIHJpY2huZXNzIGFuZCBzaXRlIGFyZWEsIGJ1dCB1bmV4cGVjdGVkbHkgdGhpcyByZWxhdGlvbnNoaXAgYXBwZWFycyB0byBiZSBuZWdhdGl2ZS4gQmVjYXVzZSB0aGUgZGF0YSBhcmUgbGlrZWx5IG5vbi1saW5lYXIsIGEgZ2VuZXJhbGl6ZWQgbGluZWFyIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGFzc2VzcyB0aGlzIHJlbGF0aW9uc2hpcC4NCg0KDQoNCg0KIyMgQ29tbXVuaXRpZXMNCg0KYGBge3IgU29yZW5zZW4gdGltZSwgaW5jbHVkZT1GQUxTRX0NCnN1bTAxPC1yb3dTdW1zKFMwMSkNCnN1bTAyPC1yb3dTdW1zKFMwMikNCnN1bTAzPC1yb3dTdW1zKFMwMykNCnN1bTA0PC1yb3dTdW1zKFMwNCkNCnN1bTA1PC1yb3dTdW1zKFMwNSkNCnN1bTA2PC1yb3dTdW1zKFMwNikNCnN1bTA3PC1yb3dTdW1zKFMwNykNCnN1bTA4PC1yb3dTdW1zKFMwOCkNCnN1bTA5PC1yb3dTdW1zKFMwOSkNCnN1bTEwPC1yb3dTdW1zKFMxMCkNCnN1bTExPC1yb3dTdW1zKFMxMSkNCnN1bTEyPC1yb3dTdW1zKFMxMikNCnN1bTEzPC1yb3dTdW1zKFMxMykNCnN1bTE0PC1yb3dTdW1zKFMxNCkNCnN1bTE2PC1yb3dTdW1zKFMxNikNCnN1bTE3PC1yb3dTdW1zKFMxNykNCnN1bTE4PC1yb3dTdW1zKFMxOCkNCnN1bTE5PC1yb3dTdW1zKFMxOSkNCnN1bTIwPC1yb3dTdW1zKFMyMCkNCnN1bTIxPC1yb3dTdW1zKFMyMSkNCnN1bTIyPC1yb3dTdW1zKFMyMikNCnN1bTIzPC1yb3dTdW1zKFMyMykNCnN1bTI0PC1yb3dTdW1zKFMyNCkNCnN1bTI1PC1yb3dTdW1zKFMyNSkNCnN1bTI2PC1yb3dTdW1zKFMyNikNCnN1bTI3PC1yb3dTdW1zKFMyNykNCnN1bTI4PC1yb3dTdW1zKFMyOCkNCg0Kc3VtbWFyeTwtYXMuZGF0YS5mcmFtZShyYmluZChzdW0wMSwgc3VtMDIsIHN1bTAzLCBzdW0wNCwgc3VtMDUsIHN1bTA2LCBzdW0wNywgc3VtMDgsIHN1bTA5LCBzdW0xMCwgc3VtMTEsIHN1bTEyLCBzdW0xMywgc3VtMTQsIHN1bTE2LCBzdW0xNywgc3VtMTgsIHN1bTE5LCBzdW0yMCwgc3VtMjEsIHN1bTIyLCBzdW0yMywgc3VtMjQsIHN1bTI1LCBzdW0yNiwgc3VtMjcsIHN1bTI4KSkNCnN1bXM8LWNvbFN1bXMoc3VtbWFyeSkNCiNUTyBERUxFVEUgU0lOR0xFVE9OUw0Kc3Vtc3VtczwtcmJpbmQoc3Vtcywgc3VtbWFyeSkNCnJvd25hbWVzKHN1bXN1bXMpWzFdPC0ic3VtIg0Kc3Vtc3VtczEgPSBzdW1zdW1zWyxzdW1zID4gMV0NCm5jb2woc3Vtc3Vtc1ssc3VtcyA9PSAxXSkNCiMyMzUqKiBzaW5nbGV0b25zIQ0KDQojQ29udmVydCB0byBiaW5hcnkNCnN1bXN1bXMxW3N1bXN1bXMxID4gMF0gPC0gMQ0KDQpzdW1zdW1zMjwtc2xpY2Uoc3Vtc3VtczEsIC1jKDEpKQ0KDQojMD1pZGVudGljYWwsIDE9dGhlIG1vc3QgZGlzc2ltaWxhcg0Kc29yZW5zZW48LXZlZ2Rpc3Qoc3Vtc3VtczIsIG1ldGhvZD0iYnJheSIsIGJpbmFyeT1UUlVFLCBkaWFnPVRSVUUsIHVwcGVyPUZBTFNFLCBuYS5ybSA9IEZBTFNFKQ0Kc29yZW5zZW4ubTwtYXMubWF0cml4KHNvcmVuc2VuKQ0Kc29yZW5zZW4ubS50PC1zaWduaWYoc29yZW5zZW4ubSwgZGlnaXRzID0gMykNCmBgYA0KDQpgYGB7ciBEaXN0YW5jZSBNYXRyaXgsIGluY2x1ZGU9RkFMU0V9DQpzaXRlc2l6ZXNnZW88LXNlbGVjdChzaXRlc2l6ZXMsIGMoIlNpdGUiLCAiTGF0aXR1ZGUiLCAiTG9uZ2l0dWRlIikpDQpzaXRlc2l6ZXNnZW8uMTwtc2l0ZXNpemVzZ2VvWyxjKDEsMywyKV0NCnNpdGVzaXplc2dlby4yPC1zaXRlc2l6ZXNnZW8uMVssYygyLDMpXQ0KZGlzdGFuY2UubTwtZGlzdG0oc2l0ZXNpemVzZ2VvLjIpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNUaGlzIGlzIHJlYWxseSBzbG9wcHkNCnNvcmVuc2VuY29sPC1hcy5kYXRhLmZyYW1lKHNvcmVuc2VuLm0udCkNCmRpc3RhbmNlY29sPC1hcy5kYXRhLmZyYW1lKGRpc3RhbmNlLm0pDQpzb3JlbnNlbm1lbHQ8LW1lbHQoc29yZW5zZW5jb2wsIHZhcmlhYmxlLm5hbWUgPSAnU29yZW5zZW4nKQ0KZ2VvZ3JhcGhpY21lbHQ8LW1lbHQoZGlzdGFuY2Vjb2wsIHZhcmlhYmxlLm5hbWUgPSAnR2VvZ3JhcGhpYycpDQpkaXN0YW5jZS4xPC1jYmluZChnZW9ncmFwaGljbWVsdCwgc29yZW5zZW5tZWx0KQ0KbmFtZXMoZGlzdGFuY2UuMSk8LWMoIlZhcjEiLCAiZ2VvZ3JhcGhpYyIsICJWYXIyIiwgIlNvcmVuc2VuIikNCiNSZW1vdmUgemVybydzIGJlY2F1c2UgdGhleSBvY2N1ciB3aHdlcmUgc2l0ZXMgbWF0Y2gNCmRpc3RhbmNlLmY8LWZpbHRlcihkaXN0YW5jZS4xLCBnZW9ncmFwaGljID4gMCkNCmBgYA0KDQpgYGB7ciBOTURTIHByZXAsIGluY2x1ZGU9RkFMU0V9DQpzb3JlbnNlbi5ubWRzMDEgPC0gbWV0YU1EUyhzb3JlbnNlbiwgaz0xMCkNCnNvcnN0cmVzc3Bsb3Q8LXN0cmVzc3Bsb3Qoc29yZW5zZW4ubm1kczAxKQ0KDQpgYGANCg0KDQpgYGB7ciBOTURTLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KY2x1c3RlcjwtaGNsdXN0KHNvcmVuc2VuLCBtZXRob2Q9ImF2ZXJhZ2UiKQ0KZ3JwPC1jdXRyZWUoY2x1c3Rlciw2KQ0KcGxvdChzb3JlbnNlbi5ubWRzMDEsIHR5cGU9InRleHQiKQ0Kb3JkaWNsdXN0ZXIoc29yZW5zZW4ubm1kczAxLCBjbHVzdGVyLCBwcnVuZSA9IDcsIGRpc3BsYXkgPSAic2l0ZXMiLA0KICAgICAgICAgdyA9IHdlaWdodHMoc29yZW5zZW4ubm1kczAxLCBkaXNwbGF5KSkNCiMgb3JkaWVsbGlwc2Uoc29yZW5zZW4ubm1kczAxLCBncm91cD1ncnAsIGRpc3BsYXk9InNpdGVzIiwga2luZD1jKCJzZCIpLCBkcmF3PSJsaW5lcyIsIGNvbmY9MC45NSwgbHdkPTIuNiwgY29sPSJncmV5NDQiKQ0KYGBgDQoNCiMjIyBXaGljaCBzaXRlcyBhcmUgc2ltaWxhcj8NCg0KVGhlcmUgbWF5IGJlIGEgbG90IG9mIG92ZXJsYXAgaW4gY2x1c3RlcnMgZHVlIHRvIHRoZSBuZXN0ZWRuZXNzIG9mIHNvbWUgY29tbXVuaXR5IHR5cGVzLiBXZSBzaG91bGQgcmV2aXNpdCB0aGlzIGxhdGVyIHVzaW5nIHF1YWRyYXRzIGFzIHJlcGxpY2F0ZXMuDQoNCiMjIyBBcmUgc2l0ZXMgc2ltaWxhciBiZWNhdXNlIHRoZXkncmUgZ2VvZ3JhcGhpY2FsbHkgY2xvc2VyPw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZ2dwbG90KGRpc3RhbmNlLmYsIGFlcyh4PWRpc3RhbmNlLmYkZ2VvZ3JhcGhpYywgeT1kaXN0YW5jZS5mJFNvcmVuc2VuKSkgKw0KICBnZW9tX3BvaW50KCkrDQogIGdlb21fc21vb3RoKG1ldGhvZD0iZ2xtIiwgbWV0aG9kLmFyZ3M9bGlzdChmYW1pbHk9ImJpbm9taWFsIihsaW5rPSJsb2dpdCIpKSkrDQogIHlsYWIoIlNvcmVuc2VuIGRpc3NpbWlsYXJpdHkgaW5kZXgiKSsNCiAgeGxhYigiR2VvZ3JhcGhpYyBkaXN0YW5jZSAobSkiKSsNCiAgZ2d0aXRsZSgiR2VvZ3JhcGhpYyBkaXN0YW5jZSBiZXR3ZWVuIHNpdGVzIGhhcyBubyBlZmZlY3Qgb24gc3BlY2llcyBzaW1pbGFyaXR5IikrDQogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxKSkNCmBgYA0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpkaXN0YW5jZS5nbG08LWdsbShTb3JlbnNlbn5nZW9ncmFwaGljLCBmYW1pbHk9Ymlub21pYWwsIGRhdGE9ZGlzdGFuY2UuZikNCnN1bW1hcnkoZGlzdGFuY2UuZ2xtKQ0KYGBgDQoNCk9yZGluYXRpb25zDQoNCiMjIEltcGxpY2F0aW9ucw0KDQpQbGFudCBjb21tdW5pdGllcyBhcmVuJ3QgcmVhbC4gV2UgY2FuIGFsbCBnbyBob21lIG5vdy4NCg==